package com.qsxc.utils.image;

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;

/**
 * 图片处理工具类
 */
public class ImageUtil {

    /**
     * @param srcImgPath 源图片路径
     * @param tarImgPath 保存的图片路径
     * @param content    水印内容
     * @param font       水印字体
     * @param position   水印位置
     */
    public static void addWaterMark(String srcImgPath, String tarImgPath, String content, Font font, Position position) {
        try {
            // 读取原图片信息
            //得到文件
            File srcImgFile = new File(srcImgPath);
            //文件转化为图片
            Image srcImg = ImageIO.read(srcImgFile);
            //获取图片的宽
            int srcImgWidth = srcImg.getWidth(null);
            //获取图片的高
            int srcImgHeight = srcImg.getHeight(null);
            // 加水印
            BufferedImage bufImg = new BufferedImage(srcImgWidth, srcImgHeight, BufferedImage.TYPE_INT_RGB);
            Graphics2D g = bufImg.createGraphics();
            g.drawImage(srcImg, 0, 0, srcImgWidth, srcImgHeight, null);
            Color color = new Color(0, 0, 0, 255);
            //根据图片的背景设置水印颜色
            g.setColor(color);
            //设置字体
            g.setFont(font);
            //画出水印
            g.drawString(content, position.getX(), position.getY());
            g.dispose();
            // 输出图片
            FileOutputStream outImgStream = new FileOutputStream(tarImgPath);
            ImageIO.write(bufImg, "jpg", outImgStream);
            System.out.println("添加水印完成");
            outImgStream.flush();
            outImgStream.close();
        } catch (Exception e) {
            // TODO: handle exception
        }
    }

    public int getWatermarkLength(String waterMarkContent, Graphics2D g) {
        return g.getFontMetrics(g.getFont()).charsWidth(waterMarkContent.toCharArray(), 0, waterMarkContent.length());
    }

    public static void main(String[] args) {
        //水印字体
        Font font = new Font("微软雅黑", Font.PLAIN, 45);
        //源图片地址
        String srcImgPath = "F:\\1.jpg";
        //待存储的地址
        String tarImgPath = "F:\\2.jpg";
        //水印内容
        String content = "水印内容。。。。。。。。";
        //水印图片色彩以及 透明度

        addWaterMark(srcImgPath, tarImgPath, content, font, new Position(500, 600));
    }


}
